﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Practices.Unity;
using Triunfadores.BusinessEntities;
using Triunfadores.BusinessLogic.Service;

namespace Triunfadores.Web.Acciones
{
    public partial class Venta : System.Web.UI.Page
    {
        #region DECLARACION DE DEPENDENCIAS

        [Dependency]
        public IAccionService AccionService { get; set; }

        [Dependency]
        public IVentaAccionService VentaAccionService { get; set; }

        [Dependency]
        public IClienteService ClienteService { get; set; }

        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            #region Add, Edit and Delete
            var opc = Request.QueryString["opc"];
            var idAccion = Request.QueryString["idAccion"];

            if (!Page.IsPostBack)
            {
                if (opc != null && opc.Equals("nuevo"))
                {
                    ViewState["opc"] = "nuevo";

                    var venta = new VentaAccion()
                    {
                        //siquiero que la fecha sea la misma del sistema
                        FechaVenta = DateTime.Now

                    };

                    BindingVenta(venta);

                    Cache.Insert("venta", venta);

                }
                //else if (idAccion != null && opc.Equals("editar"))
                //{
                //    ViewState["opc"] = "editar";

                //    var id = Int32.Parse(idAccion);
                //    var evento = EventoBL.GetEventoById(id);

                //    tbxNombreEvento.Text = evento.NombreEvento.ToString();
                //    tbxSintesis.Text = evento.Sintesis.ToString();
                //    tbxDescripcion.Text = evento.Descripcion.ToString();
                //    tbxCosto.Text = evento.Precio.ToString();
                //    lblCapacidad.Visible = true;
                //    tbxCapacidad.Text = evento.Ambiente.CantidadPersonas.ToString();


                //    //para que me diga el nombre de la imagen al momento de editar
                //    lblImagen.Visible = true;
                //    lblImagen.Text = evento.Imagen;

                //    ddlLugarEvento.SelectedValue = evento.AmbienteId.ToString();
                //    ddlTipoEvento.SelectedValue = evento.TipoEventoId.ToString();
                //    ddlModalidad.SelectedValue = evento.Modalidad.ToString();

                //    tbxCapacidad.Visible = true;

                //    if (ddlModalidad.SelectedValue == "Precio de Entrada")
                //    {
                //        lblPrecio.Visible = true;
                //        tbxCosto.Visible = true;
                //    }

                //    Cache.Insert("evento", evento);

                //    BindingEvento(evento);

                //}
                //else if (opc != null && opc == "eliminar" && idAccion != null)
                //{
                //    var id = Int32.Parse(idAccion.ToString());

                //    //para eliminar la imagen
                //    var evento = EventoBL.GetEvento(id);

                //    //2
                //    var imgDb = evento.Imagen;

                //    if (System.IO.File.Exists("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + imgDb))
                //    {
                //        System.IO.File.Delete("C:/Users/mompi 3p/Documents/INC/ddcCajamarca/ddcCajamarca.Web/Images/AgendaCultural/" + imgDb);
                //    }
                //    //end delete img

                //    EventoBL.DeleteEvento(id);
                //    Response.Redirect("frmListarEventos.aspx");
                //}

            }
            #endregion
        }

        #region ENLACE A VENTA
        private void BindingVenta(VentaAccion ventaAccion)
        {
            //hfIdEvento.Value = evento.Id.ToString();

            lblFecha.Text = ventaAccion.FechaVenta.ToShortDateString();

            if (ventaAccion.Socio != null)
            {
                lblDatosSocio.Text = ventaAccion.Socio.Nombres + " " +
                                     ventaAccion.Socio.Apellidos;
            }

            //Para sumar lo que se va agregagando en el Aporte
            ventaAccion.Total = ventaAccion.VentaAccionDetalles.Sum(dp => dp.Monto);

            lvDetalle.DataSource = ventaAccion.VentaAccionDetalles;
            lvDetalle.DataBind();

            if (ventaAccion.VentaAccionDetalles.Count > 0)
            {
                //para el total que aparece el el footer
                var lblTotal = lvDetalle.FindControl("lblTotal") as Label;
                lblTotal.Text = ventaAccion.Total.ToString();
            }
        }
        #endregion

        public IEnumerable<Accion> ObtenerAcciones()
        {
            return AccionService.ObtenerTodasLasAcciones();
        }

        #region Agregar Acciones a la venta
        protected void lvAcciones_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "AddDetalle")
            {
                var accionId = Int32.Parse(e.CommandArgument.ToString());
                var accion = AccionService.ObtenerAccionPorId(accionId);

                //recuperar pedido del cache
                var venta = Cache.Get("venta") as VentaAccion;

                var existe = venta.VentaAccionDetalles.SingleOrDefault(i => i.AccionId.Equals(accionId));

                if (existe == null)
                {
                    var newDetalle = new DetalleVentaAccion()
                    {
                        Accion = accion,
                        AccionId = accionId,
                        VentaAccId = venta.Id,
                        Cantidad = 1

                    };
                    venta.VentaAccionDetalles.Add(newDetalle);

                }
                else
                {
                    existe.Cantidad += 1;
                    //string script = "alert('Ya ha sido asignado al la venta');";
                    //ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, true);

                }

                BindingVenta(venta);

                Cache.Insert("venta", venta);

            }
        }
        #endregion

        #region Quitar Acciones de la venta
        protected void lvDetalle_ItemCommand(object sender, ListViewCommandEventArgs e)
        {
            if (e.CommandName == "QuitarDetalle")
            {
                var accionId = Int32.Parse(e.CommandArgument.ToString());

                var venta = Cache.Get("venta") as VentaAccion;

                //item es un insumo agrgado al detalle
                var accion = venta.VentaAccionDetalles.SingleOrDefault(i => i.AccionId.Equals(accionId));

                if (accion != null)
                {
                    //verificamos que si la cantidad del item en el detalle es == 1
                    //si es verdadero borrara el item del detalle
                    if (accion.Cantidad == 1)
                    {
                        venta.VentaAccionDetalles.Remove(accion);
                    }
                    //si la condicion del if es falsa, entonces solo disminuira la cantidad del item
                    accion.Cantidad -= 1;
                }

                BindingVenta(venta);

                Cache.Insert("venta", venta);
            }
            else if (e.CommandName == "ActualizarDetalle")
            {
                var venta = Cache.Get("venta") as VentaAccion;

                foreach (var row in lvDetalle.Items)
                {
                    var tbxCantidad = row.FindControl("tbxCantidad") as TextBox;

                    venta.VentaAccionDetalles[row.DisplayIndex].Cantidad = Int32.Parse(tbxCantidad.Text);
                   
                }
                BindingVenta(venta);

                Cache.Insert("venta", venta);
            }
        }
        #endregion

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            var ventaAccion = Cache.Get("venta") as VentaAccion;

            ventaAccion.FechaVenta = DateTime.Parse(lblFecha.Text);
            //venta.FechaFin = DateTime.Parse(tbxFechFin.Text);
            //venta.HoraInicio = DateTime.Parse(tbxHoraInicio.Text);
            //venta.HoraFin = DateTime.Parse(tbxHoraFin.Text);
            //venta.Modalidad = ddlModalidad.SelectedItem.ToString();
            //venta.Precio = decimal.Parse(tbxCosto.Text);

            if (ViewState["opc"].ToString() == "nuevo")
            {
                VentaAccionService.AddVentaAccion(ventaAccion);

                Response.Redirect("~/Reportes/rptComprobanteVenta.aspx?idVenta=" + ventaAccion.Id);
            }
        }

        protected void btnBuscarSocio_Click(object sender, EventArgs e)
        {
            var dni = tbxDni.Text;

            var socio = ClienteService.FindSearchingFromAvaladorByDni(dni);

            if (socio != null)
            {
                lblMensajeSocio.Text = "";
                var ventaAccion = Cache.Get("venta") as VentaAccion;

                ventaAccion.Socio = socio;
                ventaAccion.IdSocio = socio.Id;

                BindingVenta(ventaAccion);

                Cache.Insert("venta", ventaAccion);

            }
            else
            {
                lblMensajeSocio.Text = "El socio no existe...!!!";
                lblDatosSocio.Text = "";
            }
        }
    }
}